package controladores;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import juego.Juego;
import juego.Jugador;
import juego.usuariosGuardados.UsuariosGuardados;
import persistores.persistoresDeJugador.JugadorPersistor;
import persistores.persistoresDeJugador.UsuariosGuardadosPersistor;
import vistas.InterfazCreacionPartida;
import vistas.InterfazJuegoPrincipal;
import vistas.InterfazMenu;
import vistas.InterfazVerPuntajes;
import vistas.VentanaCreacionPartida;
import vistas.VentanaJuegoPrincipal;
import vistas.VentanaVerPuntajes;


public class ControladorMenu extends Controlador implements ActionListener {
    private InterfazMenu vista;
    private Juego modelo;
    
    public ControladorMenu (InterfazMenu vista, Juego modelo) {
        this.vista = vista;
        this.modelo = modelo;
        vista.setSaludo(modelo.getJugador().getNickname());
    }
    
    @Override
    public void actionPerformed (ActionEvent evento) {
        if (evento.getActionCommand().equals("Comenzar partida")) {
            InterfazCreacionPartida vistaCreacionPartida = new VentanaCreacionPartida();
            ControladorCreacionPartida controlador = new ControladorCreacionPartida (vistaCreacionPartida, this.modelo);
            vistaCreacionPartida.setControlador(controlador);
            vistaCreacionPartida.arrancar();
   
        }
	else if (evento.getActionCommand().equals("Retomar partida guardada")) {
            //Se verifica la existencia de usuarios guardados.
            File archivoUsuarios = new File(".\\UsuariosGuardados.xml");
            
            if (archivoUsuarios.exists()) {
                retomarPartidaGuardada();
            } else{
              //El archivo no se pudo encontrar. Lanza un mensaje de error.
               vista.mostrarMensajeDeError();
            }
            
        } else if (evento.getActionCommand().equals("Ver puntajes")) {
            InterfazVerPuntajes vistaPuntajes = new VentanaVerPuntajes();
            ControladorVerPuntajes controlador = new ControladorVerPuntajes (vistaPuntajes, this.modelo);
            vistaPuntajes.setControlador(controlador);
            vistaPuntajes.arrancar();
        }
        else if (evento.getActionCommand().equals("Salir")) {
            System.exit(0);
        }
    }
    
    private void retomarPartidaGuardada () {
        UsuariosGuardadosPersistor persistor = new UsuariosGuardadosPersistor();
        UsuariosGuardados usuariosGuardados = persistor.deserializar(".\\UsuariosGuardados");

        String nombreJugador = modelo.getJugador().getNickname();

        if(usuariosGuardados.usuarioEstaEnUsuariosGuardados(nombreJugador)) {

            //Se verifica que el usuario contenga una partida guardada.
            File archivoPartida = new File (".\\" + nombreJugador + ".xml");

            if (archivoPartida.exists()) {
                JugadorPersistor persistorJugador = new JugadorPersistor();
                Jugador jugador = persistorJugador.deserializar(".\\" + nombreJugador);
                modelo.setJugador(jugador);

                InterfazJuegoPrincipal vistaJuegoPrincipal = new VentanaJuegoPrincipal();
                ControladorJuegoPrincipal controlador = new ControladorJuegoPrincipal (vistaJuegoPrincipal, this.modelo);
                vistaJuegoPrincipal.setControlador(controlador);
                vistaJuegoPrincipal.arrancar();
            }else{
                //El usuario no tiene partida guardada.
                vista.mostrarMensajeNoExistePartidaGuardada();
            }
        //Si no se encuentra en la lista de usuarios guardados.
        } else {
            vista.mostrarMensajeNoExistePartidaGuardada();
        }
    }
}